提到通信,就不得不提到DBC文件,相信从事汽车行业的同学在工作过程中,应该多多少少都接触过该格式的文件。
DBC文件全称是Database CAN,是CAN的数据库文件,用于定义CAN总线网络中的消息和信号。其起源于90年代中期,当时汽车制造商采用CAN总线作为主要通信网络,因电子设备增加致总线复杂性上升,需标准化方式描述管理数据,DBC文件格式便应运而生,它能记录CAN消息的ID、长度、周期及信号信息,后被各大汽车制造商采用成为行业标准之一。
随着技术发展,DBC文件使用范围已不限于汽车行业,还广泛应用于工业自动化、医疗设备、航空航天等领域,现代的DBC编辑器和阅读器支持更复杂数据结构与高级验证机制,可适用于LIN、FlexRay、MOST等其他车辆网络标准。
在车辆通信系统中,DBC文件至关重要,它是实现车辆内部通信标准化的关键,能让不同制造商的ECU无缝交换信息,还可简化车辆诊断和维护过程,提高售后服务效率与可靠性。
1. ECU开发:为工程师编写ECU软件代码提供消息、信号属性定义,实现数据收发处理。
2. 汽车诊断:诊断工具依其了解诊断请求、响应消息格式,判断车辆故障。
3. 测试验证:模拟生成CAN消息测试ECU响应,监控实际通信数据,验证通信准确性。
4. 网络设计优化:助力规划CAN总线网络,合理分配消息ID、规划信号传输,避免冲突。
5. 售后维修保养:为维修工具提供协议信息,便于读取故障和配置参数,进行维修。
6. 软件更新升级:保障新软件与CAN总线通信协议兼容,调整通信逻辑。
7. 供应商协作:作为通用标准,确保各供应商ECU产品与整车通信系统兼容。
1. 版本信息:记录文件版本号,标识更新情况。
2. 命名空间:管理元数据,包含描述、注释、属性定义等。
3. 总线定义:明确CAN总线连接的ECU名称。
4. 消息定义:含消息ID、名称、长度及发送ECU等信息,它包含了多个信号。
5. 信号定义:消息中的数据单元,定义了如何从消息数据中解析出具体的值。每个信号包括名称、位宽、缩放系数、偏移量、范围、单位等信息。
6. 属性定义和值:前者定义属性类型范围,后者为元素设属性值。
7. 注释:解释消息、信号等元素含义用途。
8. 值表:定义信号取值范围及对应含义。
一般来说,DBC文件包含以下8种关键信息:
在DBC文件格式中,各个部分都以特定的关键字起始,这些关键字让文件的结构化内容更易于阅读和解析。紧随着版本声明(VERSION)的是NS_段,它是一种灵活的扩展机制。借助该机制,在DBC文件里引入新的关键字时,既能确保与旧版本的兼容性,又不会干扰解析器的基础解析功能。
VERSION:用于明确指定DBC文件的版本号。其内容既可以为空,也可由用户根据实际需求自行定义。通过版本号,开发者能够清晰地了解文件的更新情况和适用范围。
NS__:即“New Symbol”的缩写,主要用于定义DBC文件中所使用的额外符号或关键字。这些定义能够帮助解释器或相关工具准确识别哪些是预期的关键字,从而更好地理解文件中特定功能或特性的含义。在创建DBC文件时,该段通常会自动生成,多数情况下保持默认设置即可满足需求。
DBC文件中波特率的定义格式如下:
其中,“BS_”是固定的关键字,专门用于定义CAN网络的波特率。中括号“[ ]”内的内容为可选部分,可以根据实际情况选择省略,但“BS_:”这一关键字必须存在,否则会导致文件解析出错。
提示:通常情况下,这一行会保持为空。这是因为CAN网络的波特率配置大多是在CAN控制器中进行设置的,而不是在DBC文件中。
网络节点在DBC文件中的定义格式为:
消息定义是DBC文件的核心内容,它详细描述了CAN总线上每个消息(Message)的具体信息。从结构上看,消息定义主要包含以下关键要素:
上述示例表示的是由某个节点(未明确指定,按规则若未指定发送节点,实际解析时需特殊处理)发出的消息,其msgid = 500,报文名称为“CANMessages”,数据长度为8字节。该消息包含三个信号:Speed、Engine_RPM和Temp。每个信号前面的数字表示其在消息中所占的起始位和长度,信号注释部分则给出了信号的取值范围和单位。
信号定义位于消息定义内部,用于详细描述消息中每个信号的具体信息。信号的关键属性如下:
该示例表示定义了一个名为“CGW03CRC”的普通信号,其起始位是第7位,信号长度为8bit;信号采用Motorola格式(大端序),数值类型为无符号数;因子为1,偏移量为0;信号的取值范围是0到255;该信号没有物理单位;接收该信号的节点为PEUF、PEUR和VCU这三个节点。
大端和小端的解释:
在DBC文件的信号定义中,“0”代表Motorola(Big Endian,大端序)格式,“1”代表Intel(Little Endian,小端序)格式。这两种格式主要用于描述多字节数据中字节的排列顺序:
Motorola格式(大端序):从人类常规的阅读习惯(从左到右)来看,数据的表示方式与我们日常书写习惯一致。例如,对于十六进制数0x1234,在内存中它会按照0x12 0x34的顺序存储。这种格式在网络协议以及汽车制造商领域中较为常用。
Intel格式(小端序):在这种格式下,十六进制数0x1234在内存中的存储顺序变为0x34 0x12。大多数现代的PC架构,如x86和x86 - 64架构,都采用小端序格式。
为了增强DBC文件的可读性,我们可以为消息、信号等元素添加注释信息。注释的格式如下:
其定义格式为:BA_DEF_ Object AttributeName ValueType Min Max;
上述示例表示“CANFD_BRS”是一个枚举类型的变量,其取值只能为0和1。
定义格式为:BA_DEF_DEF_ AttributeName DefaultValue;
此示例表明波特率(Baudrate)的默认值被设置为500000。
定义格式为:BA_ AttributeName Object MessageId/NodeName projectValue;
该示例表示对于特征名称为“ILUsed”的属性,其对应的网络节点名为“BGW”,该特征的设置值被设定为1。
数值表的定义格式为:VAL_ MessageId SignalName N “DefineN” …… 0 “Define0”;
上述示例表示对msgid = 268的报文中名为“ComfEnaASIL”的信号进行数值表定义:将数值3用“Invalid”表示,数值2用“Reserved”表示,数值1用“Comfort enabled”表示,数值0用“Comfort not enabled”表示。
DBC文件作为定义汽车内部通信的标准,确保了不同供应商和开发团队可以高效地协作,标准化了汽车行业的通信协议,其重要性不言而喻。正确地使用和理解DBC文件对于确保汽车系统的顺畅通信和高效开发至关重要。正确理解和应用DBC文件对于汽车系统集成商和ECU开发人员而言,也是一项重要的技能!!!